package com.blog.controller.admin;

import com.blog.entity.Blog;
import com.blog.entity.PageBean;
import com.blog.lucene.BlogIndex;
import com.blog.service.BlogService;
import com.blog.util.DateJsonValueProcessor;
import com.blog.util.ResponseUtil;
import com.blog.util.StringUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/admin/blog")
public class BlogAdminController {
    @Resource
    private BlogService blogService;
    private BlogIndex blogIndex = new BlogIndex();

    //保存博客信息
    @RequestMapping("/save")
    public String save(Blog blog, HttpServletResponse response) throws Exception {

        int resultTotal = 0;

        if (blog.getId() == null) {
            resultTotal = blogService.add(blog);//如果当前博客对象为空则添加
            blogIndex.addIndex(blog);//添加索引
        } else {
            resultTotal = blogService.update(blog);//如果当前博客对象不为空则修改编辑
           blogIndex.updateIndex(blog);//更新索引
        }

        JSONObject result = new JSONObject();

        if (resultTotal > 0) {
            result.put("success", true);
        } else {
            result.put("success", false);
        }

        ResponseUtil.write(response, result);

        return null;
    }

    //查询博客列表
    @RequestMapping("/list")
    public String list(@RequestParam(value = "page", required = false) String page, @RequestParam(value = "rows", required = false) String rows, Blog blog, HttpServletResponse response) throws Exception {

        PageBean pageBean = new PageBean(Integer.parseInt(page), Integer.parseInt(rows));

        Map<String, Object> map = new HashMap();
        map.put("title", StringUtil.formatLike(blog.getTitle()));
        map.put("start",pageBean.getStart());
        map.put("size", pageBean.getPageSize());
        //分页查询博客信息列表
        List<Blog> blogList = blogService.list(map);
        //获取共有多少条博客信息
        Long total = blogService.getTotal(map);
        //封装到json
        JSONObject result = new JSONObject();
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor("yyyy-MM-dd hh:mm:ss"));
        JSONArray jsonArray = JSONArray.fromObject(blogList,jsonConfig);

        result.put("rows", jsonArray);
        result.put("total", total);

        ResponseUtil.write(response, result);

        return null;
    }

    //删除博客
    @RequestMapping("/delete")
    public String delete(@RequestParam("ids") String ids, HttpServletResponse response) throws Exception {

        String[] idsStr = ids.split(",");

        for (int i = 0; i < idsStr.length; i++) {
            blogService.delete(Integer.parseInt(idsStr[i]));
            blogIndex.deleteIndex(idsStr[i]);//删除索引
        }
        JSONObject result = new JSONObject();
        result.put("success", true);
        ResponseUtil.write(response, result);

        return null;
    }

  //根据主键查询博客
    @RequestMapping("/findById")
    public String findById(@RequestParam("id") String id, HttpServletResponse response) throws Exception {

        Blog blog = blogService.findById(Integer.parseInt(id));

        JSONObject jsonObject = JSONObject.fromObject(blog);

        ResponseUtil.write(response, jsonObject);

        return null;
    }
}